package fr.bugtracker.commun.outils;

import java.util.MissingResourceException;
import java.util.ResourceBundle;

import javax.naming.InitialContext;
import javax.naming.NamingException;

/**
 *
 * @author lparrot
 */
public abstract class UtilsMetier {

	/**
	 * chemin du fichier de message
	 */
	private final static String FICHIER_MESSAGE = "fr.bugtracker.commun.outils.Messages_metier_fr_FR";
	/**
	 * la clé du message pour récupérer le jndi dans le fichier properties des messages
	 */
	private final static String MESSAGE_JNDI = "metier.application.jndi";

	/**
	 * Constructeur de la classe <code>UtilsMetier</code>.
	 */
	private UtilsMetier() {
	}

	/**
	 * Récupère le message issu du Bundle de message, paramétré eventuellement avec une liste d'arguments.
	 * @param pMessageKey clé de message dans le bundle
	 * @param pParameters liste d'arguments qui seront formatés avec le message
	 * @return message formaté
	 */
	public static String getMessage(String pMessageKey, Object... pParameters) {
		return getMessageAvecBundle(pMessageKey, ResourceBundle.getBundle(FICHIER_MESSAGE), pParameters);
	}

	/**
	 * Récupère le fr.bugtracker.service par rapport a son nom
	 * @param pClass {@link Class}<T>
	 * @return T
	 */
	public static <T> T getService(Class<T> pClass) {
		T vService = null;
		try {
			vService = (T) new InitialContext().lookup(getMessage(MESSAGE_JNDI) + pClass.getSimpleName());
		} catch (NamingException e) {
			e.printStackTrace();
		}
		return vService;
	}

	/**
	 * Récupère le message issu du Bundle, paramétré eventuellement avec une liste d'arguments.
	 * @param pMessageKey clé de message dans le bundle
	 * @param pBundle {@link ResourceBundle}
	 * @param pParameters liste d'arguments qui seront formatés avec le message
	 * @return message formaté
	 */
	private static String getMessageAvecBundle(String pMessageKey, ResourceBundle pBundle, Object... pParameters) {
		try {
			if (pMessageKey == null) {
				pMessageKey = "";
			}
			return String.format(pBundle.getString(pMessageKey), pParameters);
		} catch (MissingResourceException e) {
			return pMessageKey;
		}
	}

}
